package io.github.echarts.option.component;

import io.github.echarts.option.abstracts.AbstractOption;
import io.github.echarts.option.style.TextStyle;

import java.util.List;

/**
 * 图例组件配置。
 * 图例组件展现了不同系列的标记，颜色和名字，可以通过点击图例控制哪些系列显示。
 */
public class Legend extends AbstractOption {
    
    private static final long serialVersionUID = 1L;
    
    private Boolean show;
    private String type;
    private Object[] data;
    private String left;
    private String top;
    private String right;
    private String bottom;
    private String width;
    private String height;
    private String orient;
    private String align;
    private Integer itemGap;
    private TextStyle textStyle;
    private String icon;
    
    /**
     * 获取是否显示图例
     * 
     * @return 是否显示
     */
    public Boolean getShow() {
        return show;
    }
    
    /**
     * 设置是否显示图例
     * 
     * @param show 是否显示
     * @return 当前实例，用于链式调用
     */
    public Legend setShow(Boolean show) {
        this.show = show;
        return this;
    }
    
    /**
     * 获取图例类型
     * 
     * @return 图例类型
     */
    public String getType() {
        return type;
    }
    
    /**
     * 设置图例类型，可选值：
     * 'plain'：普通图例
     * 'scroll'：可滚动翻页的图例
     * 
     * @param type 图例类型
     * @return 当前实例，用于链式调用
     */
    public Legend setType(String type) {
        this.type = type;
        return this;
    }
    
    /**
     * 获取图例数据数组
     * 
     * @return 数据数组
     */
    public Object[] getData() {
        return data;
    }
    
    /**
     * 设置图例数据数组
     * 
     * @param data 数据数组
     * @return 当前实例，用于链式调用
     */
    public Legend setData(Object[] data) {
        this.data = data;
        return this;
    }
    
    /**
     * 设置图例数据数组
     * 
     * @param data 数据数组
     * @return 当前实例，用于链式调用
     */
    public Legend setData(List<?> data) {
        if (data != null) {
            this.data = data.toArray();
        }
        return this;
    }
    
    /**
     * 获取图例组件离容器左侧的距离
     * 
     * @return 左侧距离
     */
    public String getLeft() {
        return left;
    }
    
    /**
     * 设置图例组件离容器左侧的距离
     * 
     * @param left 左侧距离
     * @return 当前实例，用于链式调用
     */
    public Legend setLeft(String left) {
        this.left = left;
        return this;
    }
    
    /**
     * 获取图例组件离容器上侧的距离
     * 
     * @return 上侧距离
     */
    public String getTop() {
        return top;
    }
    
    /**
     * 设置图例组件离容器上侧的距离
     * 
     * @param top 上侧距离
     * @return 当前实例，用于链式调用
     */
    public Legend setTop(String top) {
        this.top = top;
        return this;
    }
    
    /**
     * 获取图例组件离容器右侧的距离
     * 
     * @return 右侧距离
     */
    public String getRight() {
        return right;
    }
    
    /**
     * 设置图例组件离容器右侧的距离
     * 
     * @param right 右侧距离
     * @return 当前实例，用于链式调用
     */
    public Legend setRight(String right) {
        this.right = right;
        return this;
    }
    
    /**
     * 获取图例组件离容器下侧的距离
     * 
     * @return 下侧距离
     */
    public String getBottom() {
        return bottom;
    }
    
    /**
     * 设置图例组件离容器下侧的距离
     * 
     * @param bottom 下侧距离
     * @return 当前实例，用于链式调用
     */
    public Legend setBottom(String bottom) {
        this.bottom = bottom;
        return this;
    }
    
    /**
     * 获取图例组件的宽度
     * 
     * @return 宽度
     */
    public String getWidth() {
        return width;
    }
    
    /**
     * 设置图例组件的宽度
     * 
     * @param width 宽度
     * @return 当前实例，用于链式调用
     */
    public Legend setWidth(String width) {
        this.width = width;
        return this;
    }
    
    /**
     * 获取图例组件的高度
     * 
     * @return 高度
     */
    public String getHeight() {
        return height;
    }
    
    /**
     * 设置图例组件的高度
     * 
     * @param height 高度
     * @return 当前实例，用于链式调用
     */
    public Legend setHeight(String height) {
        this.height = height;
        return this;
    }
    
    /**
     * 获取图例列表的布局朝向
     * 
     * @return 布局朝向
     */
    public String getOrient() {
        return orient;
    }
    
    /**
     * 设置图例列表的布局朝向
     * 
     * @param orient 布局朝向，可选值：'horizontal'、'vertical'
     * @return 当前实例，用于链式调用
     */
    public Legend setOrient(String orient) {
        this.orient = orient;
        return this;
    }
    
    /**
     * 获取图例标记和文本的对齐方式
     * 
     * @return 对齐方式
     */
    public String getAlign() {
        return align;
    }
    
    /**
     * 设置图例标记和文本的对齐方式
     * 
     * @param align 对齐方式，可选值：'auto'、'left'、'right'
     * @return 当前实例，用于链式调用
     */
    public Legend setAlign(String align) {
        this.align = align;
        return this;
    }
    
    /**
     * 获取图例项之间的间隔
     * 
     * @return 间隔
     */
    public Integer getItemGap() {
        return itemGap;
    }
    
    /**
     * 设置图例项之间的间隔
     * 
     * @param itemGap 间隔
     * @return 当前实例，用于链式调用
     */
    public Legend setItemGap(Integer itemGap) {
        this.itemGap = itemGap;
        return this;
    }
    
    /**
     * 获取图例文本样式
     * 
     * @return 文本样式
     */
    public TextStyle getTextStyle() {
        return textStyle;
    }
    
    /**
     * 设置图例文本样式
     * 
     * @param textStyle 文本样式
     * @return 当前实例，用于链式调用
     */
    public Legend setTextStyle(TextStyle textStyle) {
        this.textStyle = textStyle;
        return this;
    }
    
    /**
     * 获取图例项的图标类型
     * 
     * @return 图标类型
     */
    public String getIcon() {
        return icon;
    }
    
    /**
     * 设置图例项的图标类型
     * 
     * @param icon 图标类型，可选值：'circle'、'rect'、'roundRect'、'triangle'、'diamond'、'pin'、'arrow'、'none'
     * @return 当前实例，用于链式调用
     */
    public Legend setIcon(String icon) {
        this.icon = icon;
        return this;
    }
} 